/*
 *  Init
 */

acJson = new jsonTemplate();

$(window).bind('hashchange', function(e) {
    var hash = location.hash;
    
    if (hash.indexOf('#') != -1) {
        var path = hash.split('#')[1];
	
        if (path.indexOf('/') != -1) {
            path = path.split('/');
            var module = path[0];
            var page   = path[1];
            var data   = path;
	    
            if (path.length > 2) {
		data.splice(0, 2);
		data = data.join('/');
            } else {
		data = '';
            }
	    
            $('#current_page_data').val(data);
	    
            acLoadPage(page, data, module);
            acLoadOptions(module, page);
	    
            // если существует пункт меню для данной страницы, делаем его активным
            if ($('#top_menu_'+ module +'_'+ page).attr('id')) {
		
		if ($('.tab .l.active').find('a').attr('id') != 'top_menu_'+ module +'_'+ page) {
		    menuSetActive(module, page);
		}
		
            // иначе ищем родительский пункт меню, для данной страницы
            } else {
		
                $.ajax({
                    type:     'post',
                    dataType: 'json',
                    url:      '/menu/pageInfo',
                    data:     'module='+ module +'&page='+ page +'&theme_control=true',
                    success:  function (json) {
			
                        if (json && json.main_page && json.main_page != '' && $('.tab .l.active').find('a').attr('id') != 'top_menu_'+ module +'_'+ json.main_page) {
			    
                            if($('#top_menu_'+ module +'_'+ json.main_page).attr('id')) {
			    
                            menuSetActive(module, json.main_page);
                            }
                        }
                    }
                });
            }
        }
    }
});

$.ajax({
    type:     'post',
    dataType: 'json',
    url:      '/users/auth',
    data:     'theme_control=true',
    success:  function (json) {
	
        if (json && json.auth && json.auth == true) {
            menu_display(); // загрузка верхнего меню
            $(window).trigger('hashchange');
        } else {
            users_go_login(); // переход на страницу авторизации
        }
    }
});
    
$(document).ready(function(){
    Cufon.replace(['.logo h1']);
    
    $('#loading').ajaxStart(function(){
	    $.blockUI({ message: '<br/><br/>Идет загрузка...<br/><br/><br/>' });
    });         
    
    $('#loading').ajaxStop(function(){
	    $.unblockUI();
    });
    
    shortcut.add('Ctrl+S', function() {
	$('#save').click().ajaxStart(function(){
	    $.blockUI({ message: '<br/><br/>Идет загрузка...<br/><br/><br/>' });
	});
	
	return false;
    });
});

/*
 *  Functions
 */

// загрузка страницы модуля
function acLoadPage(page, data, module) {
    if (module == '' || !module)
	module = $('#current_module').val();
    else
	$('#current_module').val(module);
    
    if (page == '' || !page)
	page = $('#current_page').val();
    else
	$('#current_page').val(page);
    
    if (data == '' || !data)
	data = $('#current_page_data').val();
    else
	$('#current_page_data').val(data);
    
    var jsonResponse = false;
    
    $.ajax({
        type:     'post',
        dataType: 'json',
        url:      '/'+ module +'/'+ page +'/'+ data,
        data:     'theme_control=true',
        success:  function (json) {
            if (json) {
                jsonResponse = true;

                if (json.error && json.error != '') {
                    switch (json.error) {
                        case 'auth_error': {
                            // users_go_login();
                            break;
                        }
                        case 'access_denied': {
                            alert('У вас нет доступа к этому разделу');
                            break;
                        }
                        default: {
                            $('#main_body').html('<div class="form"><h1>Ошибка</h1><div class="inner" style="color:red"><br/>'+ json.error +'</div></div>');
                        }
                    }
                } else {
                    acJson.load_page(json);
                }
            } else {
                // No Response
                $('#main_body').html('Сервер ничего не ответил на этот запрос');
            }
        },
        complete: function (data) {
            if(!jsonResponse)
                $('#main_body').html(data['responseText']);
        }
    });
}

// загрузка списка опций выбранного раздела
function acLoadOptions(module, page) {
    if (module == '' || !module)
	    module = $('#current_module').val();
    else
	    $('#current_module').val(module);
    
    if (!page)
	    page = '';
    
    $('#main_body').css('width', '75%');
    
    $.ajax({
        type:     'post',
        dataType: 'json',
        url:      '/'+ module +'/options/'+ page,
        data:     'theme_control=true',
        success:  function (options) {

            if (!options.error || options.error == '')
                acJson.acLoadOptions(options);
        }
    });
}

// Сохранение изменений и добавление новой информации
function acFormSubmit(formId, redirect, redirect_data) {
    
    var module = $('#current_module').val();
    
    if ($('#wysiwyg').val() != 'none') {
        $('.wysiwyg').each(function(i, el){
            $(el).val(wysiwygs_save($(el).attr('id')));
        });
    }
    
    var options = {
        dataType: 'json',
        data: {
            theme_control: true
        },
        error: function(jqXHR, textStatus, errorThrown) {
            console.log('Error!');

            console.log(jqXHR);
            console.log(textStatus);
            console.log(errorThrown);
        },
        /*error: function(jqXHR, textStatus, errorThrown) {
            alert(jqXHR.status + ' = ' + jqXHR.message);
            alert(textStatus);
            alert(errorThrown);
        },*/
        success: function(data) {
            if(checkStatus(data)) {

            if (redirect && redirect != '') {
                if (redirect_data && redirect_data != '' && redirect_data != '1')
                location.href = '#'+ module +'/'+ redirect +'/'+ redirect_data;
                else
                location.href = '#'+ module +'/'+ redirect;
            } else {
                acLoadOptions();
            }

            if (data && data.message)
                alert(data.message);
            }
        }
    }; 

    $('#'+ formId).ajaxSubmit(options);
}

// удаление выбранного элемента
function acDelete(dataName, id, options, redirect) {
    
    if (options == '' || !options) options = '1';
    
    module    = $('#current_module').val();
    page      = $('#current_page').val();
    page_data = $('#current_page_data').val();
    
    if (page_data == 1) page_data = '';
    else page_data = '/'+ page_data;
    
    $.ajax({
	dataType: 'json', 
        type: 'post',
        url:  '/'+ module +'/delete/'+ dataName +'/'+ id,
	data: 'theme_control=true',
        success: function (data) {
	    
	    if(checkStatus(data)) {
		
		if (redirect == '' || !redirect)
		    acLoadPage();
		else
		    location.href = '#'+ module +'/'+ redirect;
		
		if (options == '1')
		    acLoadOptions();
		
		if (data && data.message)
		    alert(data.message);
	    }
	}
    });
}

// активация выбранного элемента
function acActivate(dataName, id, options, redirect) {
    if (options == '' || !options) options = '1';
    
    module    = $('#current_module').val();
    page      = $('#current_page').val();
    page_data = $('#current_page_data').val();
    
    if (page_data == 1) page_data = '';
    else page_data = '/'+ page_data;
    
    $.ajax({
	dataType: 'json',
        type: 'post',
        url:  '/'+ module +'/activate/'+ dataName +'/'+ id,
	data: 'theme_control=true',
        success: function (data) {
	    
	    if(checkStatus(data)) {
		
		if (redirect == '' || !redirect)
		    acLoadPage();
		else
		    location.href = '#'+ module +'/'+ redirect;
		
		if (options == '1')
		    acLoadOptions();
		
		if (data && data.message)
		    alert(data.message);
	    }
	}
    });
}

// деактивация выбранного элемента
function acDisable(dataName, id, options, redirect) {
    if (options == '' || !options) options = '1';
    
    module    = $('#current_module').val();
    page      = $('#current_page').val();
    page_data = $('#current_page_data').val();
    
    if (page_data == 1) page_data = '';
    else page_data = '/'+ page_data;
    
    $.ajax({
	dataType: 'json',
        type: 'post',
        url:  '/'+ module +'/disable/'+ dataName +'/'+ id,
	data: 'theme_control=true',
        success: function (data) {
	    
	    if(checkStatus(data)) {
		
		if (redirect == '' || !redirect)
		    acLoadPage();
		else
		    location.href = '#'+ module +'/'+ redirect;
		
		if (options == '1')
		    acLoadOptions();
		
		if (data && data.message)
		    alert(data.message);
	    }
	}
    });
}

function checkStatus(data) {
    var check = true;
    
    if (data && data.status) {
	
	switch (data.status) {
	    
	    case "403": {
		
		if (data.message)
		    alert(data.message);
		else
		    alert('Access denied.');
		
		check = false;
	    }
	    case "500": {
		
		if (data.message)
		    alert(data.message);
		else
		    alert('Something went wrong. Please, reload page.');
		
		check = false;
	    }
	}
    }
    
    return check;
}

function delete_check_item(dataName) {
    
    switch($('#select_list_options').val()) {
	
        case 'delete_all': {
	    
            for(i=0;i<$('input.check_item').length;i++)
                acDelete(dataName, $('input.check_item')[i].id);
            
            break;
        }
        case 'delete_checked': {
	    
            for(i=0; i<$('input.check_item').length; i++)
                if ($('input.check_item')[i].checked)
		    acDelete(dataName, $('input.check_item')[i].id);
            
            break;
        }
    }
}

// включение/выключение чекбоксов в списке элементов выбранного модуля(content, css, templates)
function checkAll() {                      
    che = document.getElementById('all_check').checked;
    
    for(i=0; i<$('input.check_item').length; i++)
	$('input.check_item')[i].checked = che;
};

function selChange(seln, param) {
    selNum = seln.choose_on_form.selectedIndex; 
    
    Isel = seln.choose_on_form.options[selNum].value; 
    
    document.getElementById(param).value = Isel;
}

function MsgOkCancel(msg) {
    var fRet;
    
    fRet = confirm(msg);
    
    return fRet;
}
    
/*** functions ***/

function acHtmlValue(id,type) {
    if (type == '' || !type) {
	if ($('#'+ id).attr('type'))
	    type = $('#'+ id).attr('type');
	else
	    type = $('#'+ id).attr('tag');
    }
    
    switch (type) {
	case 'checkbox':
	    var value = ($('#'+ id).attr('checked')) ? 1 : 0;
	    break;
	case 'radio':
	    var value = $(':radio[name='+ id +']').filter(':checked').val();
	    break;
	default:
	    var value = encodeURIComponent($('#'+ id).val());
    }
    
    return value;
}

function acToggle(id) {
    $('#'+ id).toggle();
}

function acSlideToggle(id,speed) {
    if (speed == '' || !speed)
	speed = 'fast';
    
    $('#'+ id).slideToggle(speed);
}

function str_replace(subject, search, replace) {
    var result = '';
    
    if (subject.length > 1) {
	result = subject.split(search).join(replace);
    } else {
	if (subject == search)
	    result = replace;
	else
	    result = subject;
    }
    
    return result;
}

function is_array(v) {
    return Object.prototype.toString.apply(v) === '[object Array]';
}

function is_object(v) {
    return Object.prototype.toString.apply(v) === '[object Object]';
}

function is_string(v) {
    return Object.prototype.toString.apply(v) === '[object String]';
}

